perm filename CF.HAN[AP,DBL] blob sn#087765 filedate 1974-09-01 generic text, type T, neo UTF8
(FILECREATED " 7-NOV-73 14:34:42" CF)


(DEFINEQ

(AD
  [LAMBDA (L)
    (SETQ PUP3FNS (SORT (APPEND PUP3FNS L)))
    (SETQ PUP3FNS (INTERSECTION PUP3FNS PUP3FNS))
    (MAKEFILE (QUOTE PUP3])

(ASK:FOR:1:CORRECT:CLASS:NAME
  [LAMBDA NIL
    (SETQ CORRECT:CLASS:NAME (READ))
    (COND
      ([AND (NOT (MEMBER CORRECT:CLASS:NAME 
                         LIST:OF:POSSIBLE:CLASS:NAMES))
            (AND (NOT (EQUAL CORRECT:CLASS:NAME (QUOTE NIL)))
                 (NOT (EQUAL CORRECT:CLASS:NAME (QUOTE NOTHING]
        (INSERT:1))
      ((MEMBER CORRECT:CLASS:NAME LIST:OF:POSSIBLE:CLASS:NAMES)
        (RECONCILE:1 CORRECT:CLASS:NAME ELEMENT])

(ASK:FOR:2
  [LAMBDA NIL
    (PRINT (QUOTE (WHAT FILE NAME SHOULD I USE
                     IN CASE I DUMP OUT ALL MY KNOWLEDGE?)))
    (SETQ FILE:NAME (READ])

(ASK:FOR:3
  [LAMBDA NIL
    (PRINT (QUOTE (SHOULD I CONTINUE ON?)))
    (READ])

(CF
  [LAMBDA NIL
    (INITIALIZE:1)
    (PARTITION:A:DOMAIN])

(CLASS:NAMES:ORDERING
  [LAMBDA (A B)
    T])

(COMPARE:1
  [LAMBDA NIL
    (PROGN (SETQ LIST:OF:OBJECTS:OF:POSSIBLE:CLASS (GETP 
                                                POSSIBLE:CLASS:NAME 
                                                      CLASS:OBJECTS))
           (SETQ SET:OF:RELATIONS:OF:POSSIBLE:CLASS (GETP 
                                                POSSIBLE:CLASS:NAME 
                                                    CLASS:RELATIONS))
           (COMPARE:1:1)
           (COMPARE:1:2])

(COMPARE:1:1
  [LAMBDA NIL
    (SETQ NEW:LIST:OF:OBJECTS:OF:ELEMENT (RENAME:1:2 
                                  LIST:OF:OBJECTS:OF:POSSIBLE:CLASS 
                                         LIST:OF:OBJECTS:OF:ELEMENT))
    (REWRITE:1 USING LIST:OF:OBJECTS:OF:ELEMENT 
               NEW:LIST:OF:OBJECTS:OF:ELEMENT POSSIBLE:CLASS:NAME)
    (REWRITE:5 USING NEW:LIST:OF:OBJECTS:OF:ELEMENT POSSIBLE:CLASS:NAME]
)

(COMPARE:1:2
  [LAMBDA NIL
    (PROGN (SETQ SET:OF:YES:RELATIONS (GETP POSSIBLE:CLASS:NAME 
                                            YES:RELATIONS))
           (SETQ SET:OF:NO:RELATIONS (GETP POSSIBLE:CLASS:NAME 
                                           NO:RELATIONS))
           (SETQ SET:OF:MAYBE:RELATIONS (GETP POSSIBLE:CLASS:NAME 
                                              MAYBE:RELATIONS))
           (AND (COMPARE:1:2:1)
                (COMPARE:1:2:2)
                (COMPARE:1:2:3])

(COMPARE:1:2:1
  [LAMBDA NIL
    (FOREACH:1:2:1 (QUOTE YES:RELATION) IN SET:OF:YES:RELATIONS
       DO
       UNTIL (QUOTE (CONTRADICTS:1)) (QUOTE (COMPARE:1:2:1:1])

(COMPARE:1:2:1:1
  [LAMBDA NIL T])

(COMPARE:1:2:2
  [LAMBDA NIL
    (FOREACH:1:2:2 (QUOTE NO:RELATION) IN SET:OF:NO:RELATIONS
       DO
       UNTIL (QUOTE (CONTRADICTS:2)) (QUOTE (COMPARE:1:2:2:1])

(COMPARE:1:2:2:1
  [LAMBDA NIL T])

(COMPARE:1:2:3
  [LAMBDA NIL
    (FOREACH:1:2:3 (QUOTE MAYBE:RELATION) IN SET:OF:MAYBE:RELATIONS
       DO
       UNTIL (QUOTE (CONTRADICTS:3)) (QUOTE (COMPARE:1:2:3:1])

(COMPARE:1:2:3:1
  [LAMBDA NIL T])

(CONTRADICTS:1
  [LAMBDA NIL
    (NOT (MEMBER YES:RELATION SET:OF:RELATIONS])

(CONTRADICTS:2
  [LAMBDA NIL
    (MEMBER NO:RELATION SET:OF:RELATIONS])

(CONTRADICTS:3
  [LAMBDA NIL NIL])

(CORRESPONDING:OBJECTS:PART
  [LAMBDA NIL
    (CADR ELEMENT])

(CORRESPONDING:RELATIONS:PART
  [LAMBDA NIL
    (CDDR ELEMENT])

(DELETE:1:1
  [LAMBDA NIL
    (PROG (TEMPORARY:MAYBE:RELATIONS)
          (SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME 
                                                MAYBE:RELATIONS))
          (SETQ TEMPORARY:MAYBE:RELATIONS (PULLOUT RELATION 
                                          TEMPORARY:MAYBE:RELATIONS))
          (PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])

(DELETE:1:2:1
  [LAMBDA NIL
    (PROG (TEMPORARY:YES:RELATIONS)
          (SETQ TEMPORARY:YES:RELATIONS (GETP CLASS:NAME YES:RELATIONS))
          (SETQ TEMPORARY:YES:RELATIONS (PULLOUT RELATION 
                                            TEMPORARY:YES:RELATIONS))
          (PUT CLASS:NAME YES:RELATIONS TEMPORARY:YES:RELATIONS])

(DELETE:1:3:1
  [LAMBDA NIL
    (PROG (TEMPORARY:NO:RELATIONS)
          (SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
          (SETQ TEMPORARY:NO:RELATIONS (PULLOUT RELATION 
                                             TEMPORARY:NO:RELATIONS))
          (PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])

(DETERMINE:1:CLASS:NAME
  [LAMBDA NIL
    (FOREACH:1 (QUOTE POSSIBLE:CLASS:NAME) IN 
                                       LIST:OF:POSSIBLE:CLASS:NAMES
       DO (QUOTE (TEST:1)))
    (ASK:FOR:1:CORRECT:CLASS:NAME)
    (COND
      ((NOT (EQUAL CLASS:NAME (QUOTE FAILURE)))
        (COND
          ([COND
              ([AND (NOT (EQUAL CLASS:NAME CORRECT:CLASS:NAME))
                    (NOT (NULL (SETDIFFERENCE SET:OF:MAYBE:RELATIONS 
                                              SET:OF:RELATIONS]
                (FORSOME:1 (QUOTE RELATION) IN (SETDIFFERENCE 
                                             SET:OF:MAYBE:RELATIONS 
                                                   SET:OF:RELATIONS)
                   DO (QUOTE (TRANSFER:1]
            T)
          (T (COND
               ([AND (NOT (EQUAL CLASS:NAME CORRECT:CLASS:NAME))
                     (NOT (NULL (SETDIFFERENCE SET:OF:RELATIONS
                                               (SETUNION 
                                             SET:OF:MAYBE:RELATIONS 
                                               SET:OF:YES:RELATIONS]
                 (FORSOME:2 (QUOTE RELATION)
                    IN (SETDIFFERENCE SET:OF:RELATIONS (SETUNION 
                                             SET:OF:MAYBE:RELATIONS 
                                               SET:OF:YES:RELATIONS))
                    DO (QUOTE (TRANSFER:2])

(DISK:DUMP
  [LAMBDA (FILE STUFF)
    (SETQ FILEVARS (MKATOM (CONCAT (MKSTRING FILE)
                                   "VARS")))
    (SET FILEVARS (QUOTE (EVERYTHING)))
    (SETQ EVERYTHING STUFF)
    (MAKEFILE FILE])

(FOREACH
  [LAMBDA (X IN SET DO ACTION)
    (PROG (RESULT)
      START:HERE
          (COND
            ((NULL SET)
              (RETURN RESULT)))
          (SET X (CAR SET))
          (SETQ SET (CDR SET))
          (SETQ RESULT (EVAL ACTION))
          (GO START:HERE])

(FOREACH:1
  [LAMBDA (NAME IN LIST:STRUCTURE DO ACTION)
    (COND
      ((NULL LIST:STRUCTURE)
        (PRINT (QUOTE (I DONT KNOW WHAT IT IS, WHAT IS IT?)))
        (QUOTE FAILURE))
      (T (PROG (RESULT:1)
           LABEL:1
               (SET NAME (CAR LIST:STRUCTURE))
               (SETQ LIST:STRUCTURE (CDR LIST:STRUCTURE))
               (SETQ RESULT:1 (EVAL ACTION))
               (COND
                 ((NOT (NULL RESULT:1))
                   (PRINT (QUOTE (I BELIEVE THIS IS A)))
                   (PRINT (EVAL NAME))
                   (PRINT (QUOTE (WHAT IS IT?)))
                   (SETQ CLASS:NAME (EVAL NAME))
                   (RETURN (EVAL NAME)))
                 (LIST:STRUCTURE (GO LABEL:1))
                 (T (RETURN (PRINT (QUOTE (I DONT KNOW WHAT IT IS, WHAT 
                                             IS IT?)))
                            (RETURN (QUOTE FAILURE])

(FOREACH:1:2:1
  [LAMBDA (YES:RELN IN SET:OF:YES:RELNS DO UNTIL UNTIL:CONDITION ACTION)
    (COND
      ((NULL SET:OF:YES:RELNS)
        T)
      (T (PROG (RESULT:1:2:1)
           LABEL:1:2:1
               (SET YES:RELN (CAR SET:OF:YES:RELNS))
               (SETQ SET:OF:YES:RELNS (CDR SET:OF:YES:RELNS))
               (SETQ RESULT:1:2:1 (EVAL ACTION))
               (COND
                 ((EVAL UNTIL:CONDITION)
                   (RETURN NIL))
                 (SET:OF:YES:RELNS (GO LABEL:1:2:1))
                 (T (RETURN RESULT:1:2:1])

(FOREACH:1:2:2
  [LAMBDA (NO:RELN IN SET:OF:NO:RELNS DO UNTIL UNTIL:CONDITION ACTION)
    (COND
      ((NULL SET:OF:NO:RELNS)
        T)
      (T (PROG (RESULT:1:2:2)
           LABEL:1:2:2
               (SET NO:RELN (CAR SET:OF:NO:RELNS))
               (SETQ SET:OF:NO:RELNS (CDR SET:OF:NO:RELNS))
               (SETQ RESULT:1:2:2 (EVAL ACTION))
               (COND
                 ((EVAL UNTIL:CONDITION)
                   (RETURN NIL))
                 (SET:OF:NO:RELNS (GO LABEL:1:2:2))
                 (T (RETURN RESULT:1:2:2])

(FOREACH:1:2:3
  [LAMBDA (MAYBE:RELN IN SET:OF:MAYBE:RELNS DO UNTIL UNTIL:CONDITION 
                                                     ACTION)
    (COND
      ((NULL SET:OF:MAYBE:RELNS)
        T)
      (T (PROG (RESULT:1:2:3)
           LABEL:1:2:3
               (SET MAYBE:RELN (CAR SET:OF:MAYBE:RELNS))
               (SETQ SET:OF:MAYBE:RELNS (CDR SET:OF:MAYBE:RELNS))
               (SETQ RESULT:1:2:3 (EVAL ACTION))
               (COND
                 ((EVAL UNTIL:CONDITION)
                   (RETURN NIL))
                 (SET:OF:MAYBE:RELNS (GO LABEL:1:2:3))
                 (T (RETURN RESULT:1:2:3])

(FORSOME:1
  [LAMBDA (RELN IN SET:DIFF DO ACTION)
    (COND
      ((NULL SET:DIFF)
        NIL))
    (SET RELN (CAR SET:DIFF))
    (EVAL ACTION)
    T])

(FORSOME:2
  [LAMBDA (RELN IN SET:DIFF DO ACTION)
    (COND
      ((NULL SET:DIFF)
        NIL))
    (SET RELN (CAR SET:DIFF))
    (EVAL ACTION)
    T])

(HALT:1
  [LAMBDA NIL
    (OUTPUT:1)
    (PRINT (APPEND (QUOTE (I JUST DUMPED MY CURRENT STATE OF KNOWLEDGE 
                             OUT ONTO THE DISK FILE))
                   (LIST FILE:NAME)))
    (COND
      ((EQUAL (ASK:FOR:3)
              (QUOTE YES))
        (PARTITION:A:DOMAIN))
      (T NIL])

(HAS:NAME
  [LAMBDA NIL
    (NOT (EQUAL (CAR ELEMENT)
                (QUOTE ?])

(INITIALIZE:1
  [LAMBDA NIL
    (SAVESETQ YES:RELATIONS (QUOTE YES:RELATIONS))
    (SAVESETQ NO:RELATIONS (QUOTE NO:RELATIONS))
    (SAVESETQ MAYBE:RELATIONS (QUOTE MAYBE:RELATIONS))
    (SAVESETQ CLASS:OBJECTS (QUOTE CLASS:OBJECTS))
    (SETQ CLASS:NAMES:ORDERING (QUOTE CLASS:NAMES:ORDERING))
    (SAVESETQ IN (QUOTE IN))
    (SAVESETQ UNTIL (QUOTE UNTIL))
    (SETQ CLASS:RELATIONS (QUOTE CLASS:RELATIONS))
    (SAVESETQ DO (QUOTE DO))
    (SETQ FOR (QUOTE FOR))
    (SAVESETQ FROM (QUOTE FROM))
    (SAVESETQ TO (QUOTE TO))
    (SETQ USING (QUOTE USING))
    (SAVESETQ LIST:OF:POSSIBLE:CLASS:NAMES NIL)
    (SAVESETQ FILE:NAME (ASK:FOR:2])

(INPUT:1:ELEMENT
  [LAMBDA NIL
    (PRINT (QUOTE (I AM READY FOR A SCENE)))
    (SETQ ELEMENT (READ))
    (SETQ LIST:OF:OBJECTS:OF:ELEMENT (CORRESPONDING:OBJECTS:PART))
    (SETQ SET:OF:RELATIONS (CORRESPONDING:RELATIONS:PART))
    (SETQ CLASS:NAME (CAR ELEMENT])

(INPUT:2:CLASS:NAME
  [LAMBDA NIL
    (SETQ CLASS:NAME CLASS:NAME)
    (COND
      ([AND (NOT (MEMBER CLASS:NAME LIST:OF:POSSIBLE:CLASS:NAMES))
            (AND (NOT (EQUAL CLASS:NAME (QUOTE NIL)))
                 (NOT (EQUAL CLASS:NAME (QUOTE NOTHING]
        (INSERT:2))
      (T (COND
           ((MEMBER CLASS:NAME LIST:OF:POSSIBLE:CLASS:NAMES)
             (RECONCILE:1 CLASS:NAME])

(INSERT:1
  [LAMBDA NIL
    (SETQ LIST:OF:POSSIBLE:CLASS:NAMES (MERGE:1 CORRECT:CLASS:NAME 
                                       LIST:OF:POSSIBLE:CLASS:NAMES 
                                               CLASS:NAMES:ORDERING))
    (PUT CORRECT:CLASS:NAME YES:RELATIONS NIL)
    (PUT CORRECT:CLASS:NAME NO:RELATIONS NIL)
    (PUT CORRECT:CLASS:NAME MAYBE:RELATIONS SET:OF:RELATIONS)
    (PUT CORRECT:CLASS:NAME CLASS:OBJECTS LIST:OF:OBJECTS:OF:ELEMENT])

(INSERT:1:1
  [LAMBDA NIL
    (PROG (TEMPORARY:YES:RELATIONS)
          (SETQ TEMPORARY:YES:RELATIONS (GETP CLASS:NAME YES:RELATIONS))
          (SETQ TEMPORARY:YES:RELATIONS (CONS RELATION 
                                            TEMPORARY:YES:RELATIONS))
          (PUT CLASS:NAME YES:RELATIONS TEMPORARY:YES:RELATIONS])

(INSERT:1:2:1
  [LAMBDA NIL
    (PROG (TEMPORARY:MAYBE:RELATIONS)
          (SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME 
                                                MAYBE:RELATIONS))
          (SETQ TEMPORARY:MAYBE:RELATIONS (CONS RELATION 
                                          TEMPORARY:MAYBE:RELATIONS))
          (PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])

(INSERT:1:3:1
  [LAMBDA NIL
    (PROG (TEMPORARY:MAYBE:RELATIONS)
          (SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME 
                                                MAYBE:RELATIONS))
          (SETQ TEMPORARY:MAYBE:RELATIONS (CONS RELATION 
                                          TEMPORARY:MAYBE:RELATIONS))
          (PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])

(INSERT:1:4:1
  [LAMBDA NIL
    (PROG (TEMPORARY:MAYBE:RELATIONS)
          (SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME 
                                                MAYBE:RELATIONS))
          (SETQ TEMPORARY:MAYBE:RELATIONS (CONS RELATION 
                                          TEMPORARY:MAYBE:RELATIONS))
          (PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])

(INSERT:2
  [LAMBDA NIL
    (SETQ LIST:OF:POSSIBLE:CLASS:NAMES (MERGE:1 CLASS:NAME 
                                       LIST:OF:POSSIBLE:CLASS:NAMES 
                                               CLASS:NAMES:ORDERING))
    (PUT CLASS:NAME YES:RELATIONS NIL)
    (PUT CLASS:NAME NO:RELATIONS NIL)
    (PUT CLASS:NAME MAYBE:RELATIONS SET:OF:RELATIONS)
    (PUT CLASS:NAME CLASS:OBJECTS LIST:OF:OBJECTS:OF:ELEMENT])

(INSERT:2:1
  [LAMBDA NIL
    (PROG (TEMPORARY:NO:RELATIONS)
          (SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
          (SETQ TEMPORARY:NO:RELATIONS (CONS RELATION 
                                             TEMPORARY:NO:RELATIONS))
          (PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])

(MERGE:1
  [LAMBDA (E L F)
    (COND
      ((OR (NULL L)
           (APPLY* F E (CAR L)))
        (CONS E L))
      (T (CONS (CAR L)
               (MERGE:1 E (CDR L)
                        F])

(OUTPUT:1
  [LAMBDA NIL
    (FOREACH (QUOTE POSSIBLE:CLASS:NAME) IN 
                                       LIST:OF:POSSIBLE:CLASS:NAMES
       DO (QUOTE (DISK:DUMP FILE:NAME (LIST POSSIBLE:CLASS:NAME
                                            (GETP POSSIBLE:CLASS:NAME 
                                                  CLASS:OBJECTS)
                                            (GETP POSSIBLE:CLASS:NAME 
                                                  YES:RELATIONS)
                                            (GETP POSSIBLE:CLASS:NAME 
                                                  NO:RELATIONS)
                                            (GETP POSSIBLE:CLASS:NAME 
                                                  MAYBE:RELATIONS])

(PARTITION:A:DOMAIN
  [LAMBDA NIL
    (PROG NIL
      START:OF:SERIES
          (INPUT:1:ELEMENT)
          (COND
            ((HAS:NAME)
              (INPUT:2:CLASS:NAME))
            (T (DETERMINE:1:CLASS:NAME)))
          (COND
            ((EQUAL CLASS:NAME (QUOTE HALT))
              (HALT:1))
            (T (PRINT (QUOTE (I NOW KNOW)))
               [FOREACH (QUOTE NAME) IN LIST:OF:POSSIBLE:CLASS:NAMES
                  DO (QUOTE (PROGN (PRINT NAME)
                                   [COND
                                     ((GETP NAME CLASS:OBJECTS)
                                       (PRIN1 (QUOTE "OBJECTS "))
                                       (PRINT (GETP NAME CLASS:OBJECTS]
                                   [COND
                                     ((GETP NAME YES:RELATIONS)
                                       (PRIN1 (QUOTE "MUST HAVW "))
                                       (PRINT (GETP NAME YES:RELATIONS]
                                   [COND
                                     ((GETP NAME NO:RELATIONS)
                                       (PRIN1 (QUOTE "MUSNT HAVE "))
                                       (PRINT (GETP NAME NO:RELATIONS]
                                   (COND
                                     ((GETP NAME MAYBE:RELATIONS)
                                       (PRIN1 (QUOTE "MAY HAVE "))
                                       (PRINT (GETP NAME 
                                                    MAYBE:RELATIONS]
               (GO START:OF:SERIES])

(PULLOUT
  [LAMBDA (E L)
    (COND
      ((ATOM L)
        L)
      ((EQUAL E (CAR L))
        (CDR L))
      (T (CONS (CAR L)
               (PULLOUT E (CDR L])

(RECONCILE:1
  [LAMBDA (CLASS:NAME)
    (SETQ LIST:OF:OBJECTS:OF:CLASS (GETP CLASS:NAME CLASS:OBJECTS))
    (SETQ SET:OF:YES:RELATIONS (GETP CLASS:NAME YES:RELATIONS))
    (SETQ SET:OF:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
    (SETQ SET:OF:MAYBE:RELATIONS (GETP CLASS:NAME MAYBE:RELATIONS))
    (RECONCILE:1:1 CLASS:NAME)
    (RECONCILE:1:2 CLASS:NAME)
    (RECONCILE:1:3 CLASS:NAME)
    (RECONCILE:1:4 CLASS:NAME])

(RECONCILE:1:1
  [LAMBDA (CLASS:NAME)
    (SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (RENAME:1:1 
                                           LIST:OF:OBJECTS:OF:CLASS 
                                         LIST:OF:OBJECTS:OF:ELEMENT))
    (SETQ NEW:LIST:OF:OBJECTS:OF:ELEMENT (RENAME:1:2 
                                           LIST:OF:OBJECTS:OF:CLASS 
                                         LIST:OF:OBJECTS:OF:ELEMENT))
    (REWRITE:1 USING LIST:OF:OBJECTS:OF:ELEMENT 
               NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
    (REWRITE:2 USING LIST:OF:OBJECTS:OF:CLASS 
               NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
    (REWRITE:3 USING LIST:OF:OBJECTS:OF:CLASS 
               NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
    (REWRITE:4 USING LIST:OF:OBJECTS:OF:CLASS 
               NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
    (REWRITE:5 USING NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
    (REWRITE:6 USING NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME])

(RECONCILE:1:2
  [LAMBDA (CLASS:NAME)
    (FOREACH (QUOTE RELATION) IN (SETDIFFERENCE SET:OF:YES:RELATIONS 
                                                SET:OF:RELATIONS)
       DO (QUOTE (TRANSFER:1:2])

(RECONCILE:1:3
  [LAMBDA (CLASS:NAME)
    (FOREACH RELATION IN (SETINTERSECTION SET:OF:RELATIONS 
                                          SET:OF:NO:RELATIONS)
       DO (QUOTE (TRANSFER:1:3])

(RECONCILE:1:4
  [LAMBDA (CLASS:NAME)
    (FOREACH (QUOTE RELATION) IN (SETDIFFERENCE SET:OF:RELATIONS
                                                (SETUNION 
                                               SET:OF:YES:RELATIONS
                                                          (SETUNION
                                                            
                                                SET:OF:NO:RELATIONS 
                                             SET:OF:MAYBE:RELATIONS)))
       DO (QUOTE (TRANSFER:1:4])

(RENAME:1:1
  [LAMBDA (L1 L2)
    (APPEND (COND
              (L1 (COND
                    (L2 (LIST (CAR L1)))
                    (T L1)))
              (T L2))
            (COND
              ((AND L1 L2)
                (RENAME:1:1 (CDR L1)
                            (CDR L2)))
              (T NIL])

(RENAME:1:2
  [LAMBDA (L1 L2)
    (APPEND (COND
              ((AND L1 L2)
                (LIST (CAR L1)))
              (T L2))
            (COND
              ((AND L1 L2)
                (RENAME:1:2 (CDR L1)
                            (CDR L2)))
              (T NIL])

(REWRITE:1
  [LAMBDA (USING LIST:OF:OBJECTS:OF:ELEMENT 
                 NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
    (PROG (NEW:1 OLD:1)
      LABEL:1
          (COND
            ((NULL LIST:OF:OBJECTS:OF:ELEMENT)
              (RETURN SET:OF:RELATIONS))
            ((NULL NEW:LIST:OF:OBJECTS:OF:ELEMENT)
              (RETURN SET:OF:RELATIONS)))
          (SETQ NEW:1 (CAR NEW:LIST:OF:OBJECTS:OF:ELEMENT))
          (SETQ OLD:1 (CAR LIST:OF:OBJECTS:OF:ELEMENT))
          (SETQ LIST:OF:OBJECTS:OF:ELEMENT (CDR 
                                         LIST:OF:OBJECTS:OF:ELEMENT))
          (SETQ NEW:LIST:OF:OBJECTS:OF:ELEMENT (CDR 
                                     NEW:LIST:OF:OBJECTS:OF:ELEMENT))
          (SUBSTITUTE NEW:1 FOR OLD:1 IN (QUOTE SET:OF:RELATIONS))
          (GO LABEL:1])

(REWRITE:2
  [LAMBDA (USING LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS 
                 CLASS:NAME)
    (PROG (OLD:2 NEW:2)
      LABEL:2
          (COND
            ((NULL LIST:OF:OBJECTS:OF:CLASS)
              (PUT CLASS:NAME YES:RELATIONS SET:OF:YES:RELATIONS)
              (RETURN SET:OF:YES:RELATIONS))
            ((NULL NEW:LIST:OF:OBJECTS:OF:CLASS)
              (PUT CLASS:NAME YES:RELATIONS SET:OF:YES:RELATIONS)
              (RETURN SET:OF:YES:RELATIONS)))
          (SETQ OLD:2 (CAR LIST:OF:OBJECTS:OF:CLASS))
          (SETQ NEW:2 (CAR NEW:LIST:OF:OBJECTS:OF:CLASS))
          (SETQ LIST:OF:OBJECTS:OF:CLASS (CDR LIST:OF:OBJECTS:OF:CLASS))
          (SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (CDR 
                                       NEW:LIST:OF:OBJECTS:OF:CLASS))
          (SUBSTITUTE NEW:2 FOR OLD:2 IN (QUOTE SET:OF:YES:RELATIONS))
          (GO LABEL:2])

(REWRITE:3
  [LAMBDA (USING LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS 
                 CLASS:NAME)
    (PROG (OLD:3 NEW:3)
      LABEL:3
          (COND
            ((NULL LIST:OF:OBJECTS:OF:CLASS)
              (PUT CLASS:NAME NO:RELATIONS SET:OF:NO:RELATIONS)
              (RETURN SET:OF:NO:RELATIONS))
            ((NULL NEW:LIST:OF:OBJECTS:OF:CLASS)
              (PUT CLASS:NAME NO:RELATIONS SET:OF:NO:RELATIONS)
              (RETURN SET:OF:NO:RELATIONS)))
          (SETQ OLD:3 (CAR LIST:OF:OBJECTS:OF:CLASS))
          (SETQ NEW:3 (CAR NEW:LIST:OF:OBJECTS:OF:CLASS))
          (SETQ LIST:OF:OBJECTS:OF:CLASS (CDR LIST:OF:OBJECTS:OF:CLASS))
          (SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (CDR 
                                       NEW:LIST:OF:OBJECTS:OF:CLASS))
          (SUBSTITUTE NEW:3 FOR OLD:3 IN (QUOTE SET:OF:NO:RELATIONS))
          (GO LABEL:3])

(REWRITE:4
  [LAMBDA (USING LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS 
                 CLASS:NAME)
    (PROG (OLD:4 NEW:4)
      LABEL:4
          (COND
            ((NULL LIST:OF:OBJECTS:OF:CLASS)
              (PUT CLASS:NAME MAYBE:RELATIONS SET:OF:MAYBE:RELATIONS)
              (RETURN SET:OF:MAYBE:RELATIONS))
            ((NULL NEW:LIST:OF:OBJECTS:OF:CLASS)
              (PUT CLASS:NAME MAYBE:RELATIONS SET:OF:MAYBE:RELATIONS)
              (RETURN SET:OF:MAYBE:RELATIONS)))
          (SETQ OLD:4 (CAR LIST:OF:OBJECTS:OF:CLASS))
          (SETQ NEW:4 (CAR NEW:LIST:OF:OBJECTS:OF:CLASS))
          (SETQ LIST:OF:OBJECTS:OF:CLASS (CDR LIST:OF:OBJECTS:OF:CLASS))
          (SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (CDR 
                                       NEW:LIST:OF:OBJECTS:OF:CLASS))
          (SUBSTITUTE NEW:4 FOR OLD:4 IN (QUOTE SET:OF:MAYBE:RELATIONS))
          (GO LABEL:4])

(REWRITE:5
  [LAMBDA (USING NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
    (SETQ LIST:OF:OBJECTS:OF:ELEMENT NEW:LIST:OF:OBJECTS:OF:ELEMENT])

(REWRITE:6
  [LAMBDA (USING NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
    (SETQ LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS)
    (PUT CLASS:NAME CLASS:OBJECTS LIST:OF:OBJECTS:OF:CLASS])

(SETDIFFERENCE
  [LAMBDA (S1 S2)
    (COND
      ((NULL S1)
        NIL)
      (T (APPEND [COND
                   ((MEMBER (CAR S1)
                            S2)
                     NIL)
                   (T (LIST (CAR S1]
                 (SETDIFFERENCE (CDR S1)
                                S2])

(SETINTERSECTION
  [LAMBDA (S1 S2)
    (INTERSECTION S1 S2])

(SETUNION
  [LAMBDA (S1 S2)
    (SETQ S1 (APPEND S1 S2))
    (INTERSECTION S1 S1])

(SUBSTITUTE
  [LAMBDA (NEW FOR OLD IN LIST:STRUCTURE)
    (SET LIST:STRUCTURE (SUBST NEW OLD (EVAL LIST:STRUCTURE])

(TEST:1
  [LAMBDA NIL
    (COMPARE:1])

(TRANSFER:1
  [LAMBDA NIL
    (SETQ NEW:SET:OF:YES:RELATIONS (CONS RELATION SET:OF:YES:RELATIONS))
    (INSERT:1:1)
    (SETQ NEW:SET:OF:MAYBE:RELATIONS (PULLOUT RELATION 
                                             SET:OF:MAYBE:RELATIONS))
    (DELETE:1:1])

(TRANSFER:1:2
  [LAMBDA NIL
    (SETQ NEW:SET:OF:MAYBE:RELATIONS (CONS RELATION 
                                           SET:OF:MAYBE:RELATIONS))
    (INSERT:1:2:1)
    (SETQ NEW:SET:OF:YES:RELATIONS (PULLOUT RELATION 
                                            SET:OF:YES:RELATIONS))
    (DELETE:1:2:1])

(TRANSFER:1:3
  [LAMBDA NIL
    (SETQ NEW:SET:OF:MAYBE:RELATIONS (CONS RELATION 
                                           SET:OF:MAYBE:RELATIONS))
    (INSERT:1:3:1)
    (SETQ NEW:SET:OF:NO:RELATIONS (PULLOUT RELATION SET:OF:NO:RELATIONS)
      )
    (DELETE:1:3:1])

(TRANSFER:1:4
  [LAMBDA NIL
    (SETQ NEW:SET:OF:MAYBE:RELATIONS (CONS RELATION 
                                           SET:OF:MAYBE:RELATIONS))
    (INSERT:1:4:1)
    (SETQ NEW:SET:OF:RELATIONS (PULLOUT RELATION SET:OF:RELATIONS])

(TRANSFER:2
  [LAMBDA NIL
    (SETQ NEW:SET:OF:NO:RELATIONS (CONS RELATION SET:OF:NO:RELATIONS))
    (INSERT:2:1)
    (SETQ NEW:SET:OF:RELATIONS (PULLOUT RELATION SET:OF:RELATIONS])
)
  (LISPXPRINT (QUOTE CFFNS)
              T)
  (RPAQQ CFFNS
         (AD ASK:FOR:1:CORRECT:CLASS:NAME ASK:FOR:2 ASK:FOR:3 CF 
             CLASS:NAMES:ORDERING COMPARE:1 COMPARE:1:1 COMPARE:1:2 
             COMPARE:1:2:1 COMPARE:1:2:1:1 COMPARE:1:2:2 
             COMPARE:1:2:2:1 COMPARE:1:2:3 COMPARE:1:2:3:1 
             CONTRADICTS:1 CONTRADICTS:2 CONTRADICTS:3 
             CORRESPONDING:OBJECTS:PART CORRESPONDING:RELATIONS:PART 
             DELETE:1:1 DELETE:1:2:1 DELETE:1:3:1 
             DETERMINE:1:CLASS:NAME DISK:DUMP FOREACH FOREACH:1 
             FOREACH:1:2:1 FOREACH:1:2:2 FOREACH:1:2:3 FORSOME:1 
             FORSOME:2 HALT:1 HAS:NAME INITIALIZE:1 INPUT:1:ELEMENT 
             INPUT:2:CLASS:NAME INSERT:1 INSERT:1:1 INSERT:1:2:1 
             INSERT:1:3:1 INSERT:1:4:1 INSERT:2 INSERT:2:1 MERGE:1 
             OUTPUT:1 PARTITION:A:DOMAIN PULLOUT RECONCILE:1 
             RECONCILE:1:1 RECONCILE:1:2 RECONCILE:1:3 RECONCILE:1:4 
             RENAME:1:1 RENAME:1:2 REWRITE:1 REWRITE:2 REWRITE:3 
             REWRITE:4 REWRITE:5 REWRITE:6 SETDIFFERENCE 
             SETINTERSECTION SETUNION SUBSTITUTE TEST:1 TRANSFER:1 
             TRANSFER:1:2 TRANSFER:1:3 TRANSFER:1:4 TRANSFER:2))
STOP